package cn.terminus.client.customer.contractinfo.param;

import cn.terminus.client.customer.contractfile.param.ContractFileNewParam;
import cn.terminus.client.customer.contractrentclause.param.ContractRentClauseNewParam;
import cn.terminus.client.customer.contractrentdiscountclause.param.ContractRentDiscountClauseNewParam;
import cn.terminus.client.customer.contractrentincrementalclause.param.ContractRentIncrementalClauseNewParam;
import cn.terminus.client.customer.custominfo.param.AddCustomInfoParam;
import cn.terminus.client.customer.custompurposeroom.param.CustomPurposeRoomNewParam;
import cn.terminus.result.common.vo.TerminusBaseTimesVo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * @author leslie.zhang
 * @date 2021/7/21 4:10 下午
 */
@Data
@Accessors(chain = true)
@ToString(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class RentContractNewParam extends TerminusBaseTimesVo {

    /**
     * 合同编号
     */
    private String code;

    /*  private Long businessId;*/
    /**
     * 合同签订日期
     */
    private LocalDate signTime;
    /**
     * 合同开始时间
     */
    private LocalDate effectiveBeginTime;
    /**
     * 合同结束时间
     */
    private LocalDate effectiveEndTime;
    /**
     * 计算精度code
     */
    @NotEmpty(message = "")
    private String precisionCode;
    /**
     * 合同标签code
     */
    private String labelCode;
    /**
     * 租客id
     */
    private Long customerId;
    /**
     * 合同签单人姓名
     */
    private String contractSigner;
    /**
     * 合同签单人电话
     */
    private String contractSignerPhone;
    /**
     * 押金
     */

    private BigDecimal deposit;
    /**
     * 押金字典单位编码
     */
    private String depositUnitCode;

    @ApiModelProperty(name = "property_fee", value = "物业费用", required = true)
    private BigDecimal propertyFee;

    @ApiModelProperty(name = "propertyFeeCode", value = "物业费用code", required = true)
    private String propertyFeeCode;
    /**
     * 交付日期
     */
    private LocalDate deliverTime;
    /**
     * 办证日期
     */
    private Integer certificateNumber;
    /**
     * 办证日期单位code 工作日/自然日
     */
    private String certificateUnitCode;
    /**
     * 违约金
     */
    private BigDecimal violation;
    /**
     * 违约金单位编码
     */
    private String violationUnitCode;
    /**
     * 合同类型 1租 2销售
     */
    private Integer type;
    /**
     * 合同状态 1正常 2删除
     */
    private Integer status;
    /**
     * create_user
     */
    //private String createUser;
    /**
     * create_time
     */
    //private Date createTime;
    /**
     * last_update_user
     */
    //private String lastUpdateUser;
    /**
     * last_update_time
     */
    //private Date lastUpdateTime;

    private AddCustomInfoParam customInfoParam;

    @ApiModelProperty(name = "purposeRoomNewList", value = "房源", required = true)
    private List<CustomPurposeRoomNewParam> purposeRoomNewList;

    @ApiModelProperty(name = "contractRentClauseNewParam", value = "合同租金条款", required = true)
    private ContractRentClauseNewParam contractRentClauses;


    @ApiModelProperty(name = "incrementalClauseNewParams", value = "递增条款", required = true)
    private List<ContractRentIncrementalClauseNewParam> incrementalClauseNewParams;

    @ApiModelProperty(name = "discountClauseNewParams", value = "优惠条款", required = true)
    private List<ContractRentDiscountClauseNewParam> discountClauseNewParams;


    @ApiModelProperty(name = "fileNewFormList", value = "文件", required = true)
    private List<ContractFileNewParam> fileNewParamList;
}
